package com.hsgene.product.service;

import com.hsgene.common.util.result.ApiResult;
import com.hsgene.common.util.result.NullObject;
import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.common.util.support.OrderHelper;
import com.hsgene.common.util.support.Pagination;
import com.hsgene.order.domain.applets.AppletsOrderPackageInfoDto;
import com.hsgene.product.condition.CommodityCondition;
import com.hsgene.product.dto.GeneticTestingCommodityDetailDto;
import com.hsgene.product.dto.GeneticTestingCommodityItemDto;
import com.hsgene.product.dto.wechat.SimpleCommodityDto;

import java.util.List;
import java.util.Map;

/**
 * 商品服务
 *
 * @author wangbing
 * @version 1.0, 2018/10/11
 */
public interface CommodityService {

    /**
     * 查询商品简要信息列表
     *
     * @param condition   查询条件
     * @param orderHelper 排序参数
     * @param limitHelper 分页餐宿
     * @return 商品简要信息列表
     */
    ApiResult<Pagination<SimpleCommodityDto>> querySimpleCommodity(CommodityCondition condition, OrderHelper
            orderHelper, LimitHelper limitHelper);

    /**
     * 查询运营管理商品列表项DTO
     *
     * @param condition   查询条件
     * @param orderHelper 排序参数
     * @param limitHelper 分页参数
     * @return
     */
    ApiResult<Pagination<GeneticTestingCommodityItemDto>> queryCommodityItems(
            CommodityCondition condition, OrderHelper orderHelper, LimitHelper limitHelper);

    /**
     * @param userId 用户id
     * @return int
     * @description 获取购物车商品数量
     * @author maodi
     * @createDate 2018/10/17 13:40
     */
    int getShoppingCarCommodityCount(String userId);

    /**
     * @param userId      用户id
     * @param limitHelper 分页条件
     * @return com.hsgene.common.util.support.Pagination<com.hsgene.product.dto.wechat.SimpleCommodityDto>
     * @description 查询当前购物车商品简要信息列表
     * @author maodi
     * @createDate 2018/10/17 11:56
     */
    Pagination<SimpleCommodityDto> getShoppingCarCommodityList(String userId, LimitHelper limitHelper);

    /**
     * @param userId 用户id
     * @param ids    商品id数组
     * @return java.util.List<com.hsgene.product.dto.wechat.SimpleCommodityDto>
     * @description 根据商品id数组获取购物车商品信息
     * @author maodi
     * @createDate 2018/10/17 15:00
     */
    List<SimpleCommodityDto> getShoppingCarCommodityListByIds(String userId, String[] ids);

    /**
     * @param userId 用户id
     * @param ids    商品id数组
     * @return java.util.Map<java.lang.String,java.lang.Object>
     * @description 根据商品id数组获取购物车商品结算信息
     * @author maodi
     * @createDate 2018/10/17 15:17
     */
    Map<String, Object> getShoppingCarCommodityBalanceByIds(String userId, String[] ids);

    /**
     * 根据套餐id查询商品信息
     *
     * @param packageId 套餐id
     * @return 商品详情信息
     */
    ApiResult<Object> findCommodityByPackageId(String packageId);

    /**
     * 更新商品信息
     *
     * @param commodityDto 商品信息
     * @return 更新结果
     */
    ApiResult<NullObject> updateCommodity(GeneticTestingCommodityDetailDto commodityDto);

    /**
     * 新增商品信息
     *
     * @param commodityDto 商品信息
     * @return 新增结果
     */
    ApiResult<NullObject> addCommodity(GeneticTestingCommodityDetailDto commodityDto);

    /**
     * 根据套餐id删除商品
     *
     * @param packageId 套餐id
     * @return 删除结果
     */
    ApiResult<NullObject> deleteCommodity(String packageId);

    /**
     * 根据套餐id删除商品
     *
     * @param packageIds 套餐id列表
     * @return 删除结果
     */
    ApiResult<NullObject> deleteCommodities(List<String> packageIds);

    /**
     * 商品上下架管理
     *
     * @param packageId 商品套餐id
     * @param isShelf   true：上架；false：下架
     * @return 操作结果
     */
    ApiResult<NullObject> shelfCommodity(String packageId, boolean isShelf);

    /**
     * @param userId 用户id
     * @param ids    商品id数组
     * @return java.util.List<com.hsgene.order.domain.applets.AppletsOrderPackageInfoDto>
     * @description 根据商品id数组获取小程序订单商品信息
     * @author maodi
     * @createDate 2018/10/18 11:27
     */
    List<AppletsOrderPackageInfoDto> getAppletsOrderPackageInfoDtosByIds(String userId, String[] ids);

}
